package com.xbongbong.saas.enums.business;

import com.xbongbong.i18n.util.I18nMessageUtil;
import com.xbongbong.paas.enums.AliasEnum;
import com.xbongbong.paas.enums.FieldTypeEnum;
import com.xbongbong.paas.enums.ScreenTypeEnum;
import com.xbongbong.saas.enums.ShowTypeEnum;
import lombok.Getter;
import org.springframework.util.StringUtils;

/**
 * @author 梁鲁江
 * @version v1.0
 * @date 2019/6/7 9:29
 * @since v1.0
 */
@Getter
public enum ContractPerformanceEnum {
    /**
     * 合同业绩分配
     */
    CONTRACT_ID("num_1", "enum.contractPerformance.attrName.contract_id", "contractId", FieldTypeEnum.LINK_BUSINESS_SINGLE.getType(), 1, 0, 0, ShowTypeEnum.ALL.getCode(), 9980, 1, 1, ScreenTypeEnum.SCREEN_OFF.getType(),0, AliasEnum.NUM.getAlias()),
    IS_SIGN("num_2", "enum.contractPerformance.attrName.is_sign", "isSign", FieldTypeEnum.COMBO_NUM.getType(), 1, 0, 0, ShowTypeEnum.ALL.getCode(), 9970, 1, 1, ScreenTypeEnum.SCREEN_GROUP.getType(),0, AliasEnum.NUM.getAlias()),
    RATE("num_3", "enum.contractPerformance.attrName.rate", "rate", FieldTypeEnum.NUM.getType(), 1, 0, 0, ShowTypeEnum.ALL.getCode(), 9960, 1, 1, ScreenTypeEnum.SCREEN_GROUP.getType(),1, AliasEnum.NUM.getAlias()),
//    AMOUNT("num_4", "分配金额", "amount", FieldTypeEnum.NUM.getType(), 1, 0, 0, ShowTypeEnum.ALL.getCode(), 9969, 1, 1, ScreenTypeEnum.SCREEN_GROUP.getType(),1),
    USER_ID("text_1", "enum.contractPerformance.attrName.user_id", "userId", FieldTypeEnum.USER.getType(), 1, 0, 0, ShowTypeEnum.ALL.getCode(), 9950, 1, 1, ScreenTypeEnum.SCREEN_GROUP.getType(),0, AliasEnum.TEXT.getAlias()),
    ADD_TIME("addTime", "enum.contractPerformance.attrName.add_time","addTime",FieldTypeEnum.ADDTIME.getType(),1,1,0,ShowTypeEnum.LIST_DETAIL.getCode(),9940,1,0, ScreenTypeEnum.SCREEN_GROUP.getType(),0, AliasEnum.DATE.getAlias()),
    UPDATE_TIME("updateTime", "enum.contractPerformance.attrName.update_time","updateTime",FieldTypeEnum.UPDATETIME.getType(),1,1,0,ShowTypeEnum.LIST_DETAIL.getCode(),9930,1,0, ScreenTypeEnum.SCREEN_GROUP.getType(),0, AliasEnum.DATE.getAlias()),

    ;

    /**
     * 英文名称
     */
    private String attr;
    /**
     * 中文名称
     */
    private String attrName;
    /**
     * 对应saas中的attr
     */
    private String saasAttr;
    /**
     * 字段类型，详见
     *
     * @see com.xbongbong.paas.enums.FieldTypeEnum
     */
    private Integer fieldType;
    /**
     * 重命名、判重、启用必填等权限
     * 1.重命名+字段权限
     * 2.重命名+字段权限+查重
     * 3.重命名+字段权限+启用、必填
     * 4.重命名+字段权限+查重+启用、必填
     * 注：pro中启用和必填是同一个权限，同时启用或同时关闭
     */
    private Integer setType;
    /**
     * 模板设计阶段字段是否允许编辑
     * 1：允许编辑
     * 0：不允许编辑
     */
    private Integer designEditable;
    /**
     * 字段是否显示在模板设计界面
     * 1：不显示
     * 0：显示
     */
    private Integer editHide;
    /**
     * 字段在各个界面（新建、编辑、列表、详情）的展现形式
     * 详见
     *
     * @see com.xbongbong.saas.enums.ShowTypeEnum
     */
    private Integer showType;
    /**
     * 字段在模板设计界面的排序
     * 建议不要用连续的数字，可以用等差数列，以防以后在两个字段之间加入新字段
     */
    private Integer sort;
    /**
     * 字段在各个界面是否可见(启用)
     * 1：可见
     * 0：不可见
     * 注：字段在具体页面的可见性需要用属性和showType联合判断，在visible=1的情况下判断showType
     */
    private Integer visible;
    /**
     * 字段是否必填
     * 1：必填
     * 0：不必填
     */
    private Integer required;
    /**
     * 筛选类型
     * 1：可筛选
     * 2：不可筛选
     */
    private Integer screenType;
    /**
     * 数字字段为金额类型，1：是；0：不是
     * 金额的可能要特殊处理
     */
    private Integer amountFlag;
    /**
     * 前端使用
     */
    private String attrType;

    ContractPerformanceEnum(String attr, String attrName, String saasAttr, Integer fieldType, Integer setType, Integer designEditable,
                 Integer editHide, Integer showType, Integer sort, Integer visible, Integer required, Integer screenType,Integer amountFlag,String attrType) {
        this.attr = attr;
        this.attrName = attrName;
        this.saasAttr = saasAttr;
        this.fieldType = fieldType;
        this.setType = setType;
        this.designEditable = designEditable;
        this.editHide = editHide;
        this.showType = showType;
        this.sort = sort;
        this.visible = visible;
        this.required = required;
        this.screenType = screenType;
        this.amountFlag = amountFlag;
        this.attrType = attrType;
    }

    public String getAttrName() {
        return I18nMessageUtil.getMessage(attrName);
    }

    public static String getI18nValue(String value) {
        return I18nMessageUtil.getMessage(value);
    }

    /**
     * @Description 根据转化后的列名，获取ck里真实列名
     * @Date 10:42 2022/1/12
     * @Param 
     * @param attr
     * @return java.lang.String
     * @throws
     **/
    
    public static String getRealAttr(String attr){
        String realAttr = null;
        for (ContractPerformanceEnum contractPerformanceEnum:values()){
            if (StringUtils.endsWithIgnoreCase(contractPerformanceEnum.attr,attr)){
                realAttr = contractPerformanceEnum.getSaasAttr();
            }
        }
        return realAttr;
    }

}
